package com.ybkj.o2o.sales.manager;


import com.ybkj.o2o.sales.common.DataGrid;
import com.ybkj.o2o.sales.entity.Coupon;
import com.ybkj.o2o.sales.entity.CouponRule;

import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;

public interface CouponManager {

  /**
   * 查询用户在某个规则下绑定的优惠券数量
   * @param couponRuleId
   * @param phone
   * @param passengerId
   * @return
   */
  Integer couponTimes (Long couponRuleId, String phone, Long passengerId);

  /**
   * 获取一张没有绑定的线路优惠券
   * @param appKey
   * @param couponRuleId
   * @return
   */
  Coupon findOneCoupon(String appKey, Long couponRuleId);


  /**
   * 根据id查找优惠券.
   * 
   * @param ruleId 优惠券规则id
   * @return List
   */
  List<Coupon> findAll(Long ruleId, String appKey);

  /**
   * 分页查询优惠券.
   * @param ruleId 优惠券规则id
   * @param code 编码
   * @param phone 手机号
   * @param page 页数
   * @param rows 每页数量
   * @param appKey 系统key
   * @return DataGrid
   */
  DataGrid<Coupon> findCoupon(Long ruleId, String code, String phone, Integer page, Integer rows,
      String appKey);

  /**
   * 赠送优惠券.
   * @param couponRule 优惠券规则
   * @param amount 赠送数量
   * @param appKey 系统key
   */
  void mass(Long couponRuleId, Integer amount, String appKey);
//  void mass(CouponRule couponRule, Integer amount, String appKey, Long lineId, BigDecimal linePrice, Double couponDiscount, String lineName);

  /**
   * 手动赠送优惠券.
   * 
   * @param passengerIds 客户id
   * @param couponRuleId 优惠券规则id
   * @param amount 赠送数量
   * @param appKey 系统key
   */
  void giftCoupon(String passengerIds, String couponRuleId, String amount, String phone,
      String appKey);

  /**
   * 失效优惠券.
   * @param id 优惠券id
   * @param appKey 系统key
   */
  void invalid(Long id, String appKey);

  /**
   * 查询单个优惠券.
   * @param id 优惠券id
   * @param appKey 系统key
   * @return Coupon
   */
  Coupon findOne(Long id, String appKey);

  /**
   * 查询单个优惠券.
   * @param couponCode 优惠券密码
   * @param appKey 系统key
   * @return Coupon
   */
  Coupon findOneByCode(String couponCode, String appKey);

  /**
   * 查询有效优惠券.
   * @param passengerId 客户id
   * @param couponType 优惠券类型
   * @param appKey 系统key
   * @return List
   */
  List<Coupon> listValidByPassenger(Long passengerId, String couponType, Long couponTypeId, String appKey, Long[] linesId);

  /**
   * 分页查询优惠券.
   * @param passengerId 客户id
   * @param page 页数
   * @param rows 每页数量
   * @param appKey 系统key
   * @param status 优惠券状态
   * @return DataGrid
   */
  DataGrid<Coupon> queryByPassenger(Long passengerId, Integer status, String couponType, Integer page, Integer rows, String appKey);

  /**
   * 修改优惠券.
   * @param coupon 优惠券内容
   */
  void update(Coupon coupon);

  /**
   * 统计客户优惠券总金额.
   * @param passengerId 客户id
   * @param appKey 系统key
   * @return BigDecimal
   */
  BigDecimal sumMoneyByPassenger(Long passengerId, String appKey);

  /**
   * 创建优惠券.
   * @param passengerId 客户id
   * @param phone 手机号
   * @param couponRuleId 优惠券规则id
   * @param status 状态
   * @param code 编码
   * @param runCode 密码
   * @param codeKey 密码
   * @param appKey 系统key
   * @return Coupon
   */
  Coupon insert(Long passengerId, String phone, Long couponRuleId, Integer status, String code,
      Long runCode, String codeKey, String appKey);

}
